import { getUserInfo, login, getUserDetail } from '@/api/user'
import { resetRouter } from '@/router'

// 使用cookie的存放token值得方法，调用存放token值得方法
// import { getToken, setToken, removeToken } from '@/utils/auth'

const state = {
  // token值初始化：从缓存中获取token
  // localStorage获取token值的方法
  token: localStorage.getItem('hr_token'),

  // cooki获取token值的方法
  // token: getToken()

  // 初始化用户信息
  userInfo: {}
}

const mutations = {
  // 获取token值
  setToken(state, data) {
    // 数据持久化，刷新的时候不会清除token值
    // localStorage存放token值的方法
    localStorage.setItem('hr_token', data)

    // cookie存放token值的方法
    // setToken(data)

    // 修改state的token数据
    state.token = data
  },
  // 移出token值
  removeToken(state) {
    state.token = null
    // localStorage移除token值方法
    localStorage.removeItem('hr_token')

    // cookie移除token值方法
    // removeToken()
  },
  // 获取用户信息
  setUserInfo(state, data) {
    state.userInfo = { ...data }
  },
  // 删除用户信息
  removeUserInfo(state) {
    state.userInfo = {}
  }
}

const actions = {
  async login(store, data) {
    try {
      const res = await login(data)
      // 调用mutations存放的修改token的方法，actions不能直接调用，需要通过mutations来进行修改
      store.commit('setToken', res)
      // 存一个时间戳，存到本地内存中,用于验证token值的有效期
      const date = new Date()
      localStorage.setItem('hr_time_key', date.getTime())
    } catch (error) {
      console.log(error)
    }
  },
  async getUserInfo(store) {
    // 发送用户信息请求
    const res = await getUserInfo()
    // 发送用户详情请求
    const detail = await getUserDetail(res.userId)
    // 把用户信息与用户详情结合起来到一个对象中，再发送请求
    const data = { ...res, ...detail }
    store.commit('setUserInfo', data)
    return data
  },
  logout(store) {
    store.commit('removeToken')
    store.commit('removeUserInfo')
    // 主动介入token值失效情况时储存的时间戳key，登出的时候应该要删除
    localStorage.removeItem('hr_time_key')
    // 清空后来添加的路由配置：如果高权限用户的退出登录，但不刷新，就登进低权限用户的页面，那么动态路由就会由第一用户和第二个用户 两个权限路由加起来，那么低权限用户在这个时候也可以访问高权限用户的页面（在页面没刷新的状态），所以我们需要清空原来的路由配置
    resetRouter()
    // 清空菜单配置
    // 如果要调用兄弟之间的 mutations
    // 需要添加第三个参数, 指定查找模块是, 以根模块作为起点
    // root: true
    store.commit('permission/setRoutes', [], {
      root: true
    })
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}
